package br.edu.universo.si.projeto2.infojob.client.apresentacao;

import br.edu.universo.si.projeto2.infojob.client.bean.BeanEmpresaAssinante;
import br.edu.universo.si.projeto2.infojob.client.bean.BeanMensagem;
import br.edu.universo.si.projeto2.infojob.client.bean.BeanProfissionalAssinante;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.ErrorDialogBox;
import br.edu.universo.si.projeto2.infojob.client.componentes.dialogboxes.SuccessDialogBox;
import br.edu.universo.si.projeto2.infojob.client.util.Util;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class ARespondeMensagem extends DialogBox
{
	private VerticalPanel vPanel;
	private HorizontalPanel rodape;

	private HorizontalPanel assuntoHPanel;
	private HorizontalPanel mensagemHPanel;

	private TextBox assuntoTxt;
	private TextArea mensagemArea;

	private Button responderBtn;
	private Button fecharBtn;

	public ARespondeMensagem(final BeanMensagem mensagem)
	{
		this.setText("Responder mensagem");

		vPanel = new VerticalPanel();
		vPanel.setSpacing(10);

		rodape = new HorizontalPanel();
		rodape.setSpacing(3);

		assuntoHPanel = new HorizontalPanel();
		mensagemHPanel = new HorizontalPanel();

		assuntoTxt = new TextBox();
		mensagemArea = new TextArea();

		assuntoTxt.setWidth("450px");
		assuntoTxt.setMaxLength(200);

		responderBtn = new Button("Responder");
		fecharBtn = new Button("Fechar");

		// adiciona o remetente
		if (mensagem.getRemetente() instanceof BeanProfissionalAssinante)
		{
			vPanel.add(new HTML("<b>De:</b> " + ((BeanProfissionalAssinante) mensagem.getRemetente()).getNome()));
		}
		else if (mensagem.getRemetente() instanceof BeanEmpresaAssinante)
		{
			vPanel.add(new HTML("<b>De:</b> " + ((BeanEmpresaAssinante) mensagem.getRemetente()).getRazaoSocial()));
		}

		// adiciona o destinatario
		if (mensagem.getDestinatario() instanceof BeanProfissionalAssinante)
		{
			vPanel.add(new HTML("<b>Para:</b> " + ((BeanProfissionalAssinante) mensagem.getDestinatario()).getNome()));
		}
		else if (mensagem.getDestinatario() instanceof BeanEmpresaAssinante)
		{
			vPanel.add(new HTML("<b>Para:</b> " + ((BeanEmpresaAssinante) mensagem.getDestinatario()).getRazaoSocial()));
		}

		assuntoHPanel.add(new HTML("<b>Assunto:&nbsp;</b>"));
		mensagemHPanel.add(new HTML("<b>Mensagem:&nbsp;</b>"));

		assuntoHPanel.add(assuntoTxt);
		mensagemHPanel.add(mensagemArea);

		vPanel.add(assuntoHPanel);
		vPanel.add(mensagemHPanel);

		assuntoTxt.setText("RE: " + mensagem.getAssunto());
		mensagemArea.setText("\n\n\n--- RE. -------------------------------------\n"  + mensagem.getMensagem());

		mensagemArea.setSize("500px", "200px");

		rodape.add(responderBtn);
		rodape.add(fecharBtn);

		vPanel.add(rodape);

		// FECHAR
		fecharBtn.addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					ARespondeMensagem.this.hide();
				}
			}
		);

		// RESPONDER
		responderBtn.addClickListener(
			new ClickListener()
			{
				public void onClick(Widget sender)
				{
					AsyncCallback cbResMensagem = new AsyncCallback()
					{
						public void onSuccess(Object result)
						{
							ARespondeMensagem.this.hide();

							SuccessDialogBox successDialogBox = new SuccessDialogBox("Resposta enviada com sucesso.");

							successDialogBox.center();
							successDialogBox.show();
						};

						public void onFailure(Throwable caught)
						{
							ErrorDialogBox errorDialogBox = new ErrorDialogBox("Erro ao enviar a resposta: " + caught.getMessage());

							errorDialogBox.center();
							errorDialogBox.show();
						};
					};

					BeanMensagem respostaMSG = new BeanMensagem();

					// na resposta o remetente vira destinatario, e o destinatario vira remetente...
					respostaMSG.setRemetente(mensagem.getDestinatario());
					respostaMSG.setDestinatario(mensagem.getRemetente());
					respostaMSG.setAssunto(assuntoTxt.getText());
					respostaMSG.setMensagem(mensagemArea.getText());

					Util.getService().enviarMensagem(respostaMSG, cbResMensagem);
				}
			}
		);

		this.add(vPanel);
	}
}